package lab3;

/**
 * 版本2.0 抽象算式类
 * 定义算术表达式的共同属性和行为，作为加法和减法表达式的父类
 */
public abstract class AbstractArithmeticExpression {
    protected double operand1;  // 第一个操作数
    protected double operand2;  // 第二个操作数

    /**
     * 构造函数
     * @param operand1 第一个操作数
     * @param operand2 第二个操作数
     */
    public AbstractArithmeticExpression(double operand1, double operand2) {
        this.operand1 = operand1;
        this.operand2 = operand2;
    }

    /**
     * 抽象方法：计算表达式结果
     * 由子类实现具体的计算逻辑
     * @return 计算结果
     */
    public abstract double calculate();

    /**
     * 获取第一个操作数
     * @return 第一个操作数
     */
    public double getOperand1() {
        return operand1;
    }

    /**
     * 获取第二个操作数
     * @return 第二个操作数
     */
    public double getOperand2() {
        return operand2;
    }

    /**
     * 抽象方法：获取运算符符号
     * 由子类实现具体的运算符符号返回
     * @return 运算符符号
     */
    public abstract char getOperatorSymbol();

    /**
     * 将表达式格式化为字符串
     * @return 格式化的表达式字符串
     */
    @Override
    public String toString() {
        return String.format("%.2f %c %.2f = %.2f", 
                            operand1, getOperatorSymbol(), operand2, calculate());
    }
}